package server;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;

/** Classe che si occupa del salvataggio dei dati della partita.
 *
 */
public class Salvataggio {
	
	/** Metodo per salvare i dati.
	 * @param obj Oggetto che viene salvato.
	 * @param filename Nome dell'oggetto salvato.
	 * @throws IOException Eccezione lanciata in caso di errore di IO.
	 */
	public static void salva(Object obj, String filename) throws IOException{
		//apro creo il file

		//apro e creo il file output stream
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("./save/"+filename+".obj"));
		
		//setto l'output stream come stream di obj
		ObjectOutputStream oos = new ObjectOutputStream(bos);
		
		//scrivo l'oggetto
		oos.writeObject(obj);
		oos.close();
	}
	
	/** Metodo per caricare i file salvati in precedenza.
	 * @param filename Nome del file da caricare.
	 * @return L'oggetto che e' stato salvato.
	 * @throws IOException Eccezione lanciata in caso di errore di IO.
	 * @throws ClassNotFoundException Eccezione lanciata in caso di errore di Class non trovata.
	 */
	public static Object carica(String filename) throws IOException, ClassNotFoundException{

		//apro il file input stream
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("./save/"+filename+".obj"));
		
		//setto l'input stream come stream di obj
		ObjectInputStream ois = new ObjectInputStream(bis);
		
		//prelevo l'oggetto
		Object objLoad = ois.readObject();
		//ois.close();
		return objLoad;
	}
	
	/** Metodo che serve per eliminare un file salvato.
	 * @param filename Nome del file da eliminare.
	 */
	public static void elimina(String filename){
		File file = new File("./save/"+filename+".obj");
		file.delete();
	}
}
